/**
 * Copyright (C) 2021 - 2031 O-Cubes Co., Ltd.
 */

/****************************************************************
 *  @file    gpio_test.c
 *  @brief   GPIO testcase source file
 *  @version v1.0
 *  @date    03. Apr. 2023
 ****************************************************************/

#include "printf.h"
#include "hal_api.h"

void gpio_int_hander(uint32_t pin) {
	(void)pin;
	printf("[GPIO]: gpio raise int handler\r\n");
}


int32_t test_gpio(void)
{
	uint32_t val;
	int32_t ret;
	DEV_GPIO_INT_CFG cfg = {1 << GPIO_17, GPIO_INT_EDGE_TRIG << GPIO_17,
	                GPIO_INT_RISING_EDGE << GPIO_17, GPIO_INT_NO_DEBOUNCE << GPIO_17};
	DEV_GPIO_BIT_ISR isr = {GPIO_17, gpio_int_hander};

	printf("\r\n[GPIO]: TEST START\r\n");

	Hal_Gpio_SetVal(GPIO_PORT_A, GPIO_15, GPIO_PIN_ACTIVE_HIGH);
	val = Hal_Gpio_GetVal(GPIO_PORT_A, GPIO_17);
	printf("[GPIOA]: GPIO15 output [%u],  GPIO17 input [%lu]\r\n", GPIO_PIN_ACTIVE_HIGH, val);

	Hal_Gpio_SetVal(GPIO_PORT_A, GPIO_15, GPIO_PIN_ACTIVE_LOW);
	val = Hal_Gpio_GetVal(GPIO_PORT_A, GPIO_17);
	printf("[GPIOA]: GPIO15 output [%u],  GPIO17 input [%lu]\r\n", GPIO_PIN_ACTIVE_LOW, val);

	ret =  Hal_Gpio_Int_Enable(GPIO_PORT_A, GPIO_17, &cfg, &isr);
	if (ret) {
		printf("[GPIOA]: GPIO17 raise int cfg err\r\n");
		return ret;
	}
	printf("[GPIO]: trigger gpio rasise int\r\n");
	Hal_Gpio_SetVal(GPIO_PORT_A, GPIO_15, GPIO_PIN_ACTIVE_LOW);
	Hal_Cnt_DelayMs(500);
	Hal_Gpio_SetVal(GPIO_PORT_A, GPIO_15, GPIO_PIN_ACTIVE_HIGH);
	Hal_Cnt_DelayMs(1000);
	Hal_Gpio_Int_Disable(GPIO_PORT_A, GPIO_15);
	
	printf("[GPIO]: TEST END\r\n");

	return 0;
}

